home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2001 May / SGI Freeware 2001 May - Disc 1.iso / dist / fw_teTeX.idb / usr / freeware / bin / makempx.z / makempx
Text File  |  2001-01-10  |  5KB  |  176 lines

  1. #!/bin/sh
  2. # '$Id: makempx.in,v 1.8 1999/01/10 19:25:06 olaf Exp $'
  3. # Make an MPX file from the labels in a MetaPost source file,
  4. # using mpto and either dvitomp (TeX) or dmp (troff).
  5. # From John Hobby's original (though there's not much of it left by now).
  6. # Public domain.
  7.  
  8. rcs_revision='$Revision: 1.8 $'
  9. version=`set - $rcs_revision; echo $2`
  10.  
  11. : ${DMP=dmp}
  12. : ${DVITOMP=dvitomp}
  13. : ${MAKEMPX_BINDIR=`echo $0 | sed 's%/[^/]*$%%'`}
  14. : ${MPTEXPRE=mptexpre.tex}
  15. : ${MPTOTEX="mpto -tex"}
  16. : ${MPTOTR="mpto -troff"}
  17. : ${NEWER=newer}
  18. : ${TEX=tex}
  19. : ${TROFF='eqn -d\$\$ | troff -Tpost'}
  20.  
  21. # convert relative path to absolute in $MAKEMPX_BINDIR:
  22. case "$MAKEMPX_BINDIR" in
  23.   /*) ;;
  24.   *)   MAKEMPX_BINDIR=`pwd`/$MAKEMPX_BINDIR;;
  25. esac
  26.  
  27. PATH=$MAKEMPX_BINDIR:/bin:/usr/bin:$PATH
  28.  
  29. # These names are documented in the MetaPost manual, so it's
  30. # unwise to change them.
  31. ERRLOG=mpxerr.log        # file for an error log if necessary
  32. TEXERR=mpxerr.tex        # file for erroneous TeX if any
  33. DVIERR=mpxerr.dvi        # troublesome dvi file if any
  34. TROFF_INERR=mpxerr        # file for erroneous troff input, if any
  35. TROFF_OUTERR=mpxerr.t        # file for troublesome troff output, if any
  36.  
  37.  
  38. usage="Usage: $0 [-tex|-troff] MPFILE MPXFILE.
  39.   If MPXFILE is older than MPFILE, translate the labels from the MetaPost
  40.   input file MPFIle to low-level commands in MPXFILE, by running
  41.     $MPTOTEX, $TEX, and $DVITOMP
  42.   by default; or, if -troff is specified,
  43.     $MPTOTR, $TROFF, and $DMP.
  44.  
  45.   The current directory is used for writing temporary files.  Errors are
  46.   left in mpxerr.{tex,log,dvi}.
  47.  
  48.   If the file named in \$MPTEXPRE (mptexpre.tex by default) exists, it is
  49.   prepended to the output in tex mode.
  50.  
  51. Email bug reports to tex-k@mail.tug.org."
  52.  
  53.  
  54. mode=tex
  55.  
  56. while test $# -gt 0; do
  57.   case "$1" in
  58.     -help|--help) 
  59.       echo "$usage"; exit 0;;
  60.     -version|--version)
  61.       echo "`basename $0` (Web2c 7.3.1) $version"
  62.       echo "There is NO warranty.  This script is public domain.
  63. Primary author: John Hobby."
  64.       exit 0;;
  65.     -troff|--troff) mode=troff;;
  66.     -tex|--tex) mode=tex;;
  67.     -*) 
  68.       echo "$0: Invalid option: $1." >&2
  69.       echo "Try \``basename $0` --help' for more information." >&2 
  70.       exit 1;;
  71.     *) 
  72.       if test -z "$MPFILE"; then
  73.         MPFILE=$1                   # input file
  74.       elif test -z "$MPXFILE"; then
  75.         MPXFILE=$1                  # output file
  76.       else
  77.         echo "$0: Extra argument $1." >&2 
  78.         echo "Try \``basename $0` --help' for more information." >&2
  79.         exit 1
  80.       fi;;
  81.   esac
  82.   shift
  83. done
  84.  
  85. if test -z "$MPFILE" || test -z "$MPXFILE"; then
  86.   echo "$0: Need exactly two file arguments." >&2
  87.   echo "Try \``basename $0` --help' for more information." >&2
  88.   exit 1
  89. fi
  90.  
  91. trap "rm -f mpx$$.* $ERRLOG; exit 4" 1 2 3 15
  92.  
  93. # If MPX file is up-to-date, do nothing.
  94. if $NEWER $MPFILE $MPXFILE; then
  95.  
  96.   # Have to remake.
  97.   # Step 0: Check typesetter mode for consistency.
  98.   case "$mode" in
  99.       tex) MPTO="$MPTOTEX";;
  100.     troff) MPTO="$MPTOTR";;
  101.         *) echo "$0: Unknown typesetter mode: $mode" >&2
  102.            exit 1;;
  103.   esac
  104.   
  105.   # Step 1: Extract typesetter source from MetaPost source.
  106.   if $MPTO $MPFILE >mpx$$.tex 2>$ERRLOG; then :;
  107.     # success
  108.   else
  109.     # failure
  110.     echo "$0: Command failed: $MPTO $MPFILE" >&2
  111.     cat $ERRLOG >&2
  112.     rm -f mpx$$.tex
  113.     exit 1
  114.   fi
  115.   if test "$mode" = troff; then
  116.     mv -f mpx$$.tex mpx$$.i
  117.   fi
  118.   
  119.   # Step 2: Run typesetter.
  120.   if test "$mode" = tex; then
  121.     if test -r $MPTEXPRE; then
  122.       # Prepend user file.
  123.       cat $MPTEXPRE mpx$$.tex >mpx$$.tmp
  124.       mv mpx$$.tmp mpx$$.tex
  125.     fi
  126.  
  127.     if $TEX --interaction=batchmode mpx$$.tex </dev/null >/dev/null; then
  128.       WHATEVER_TO_MPX="$DVITOMP"
  129.       INFILE=mpx$$.dvi
  130.       INERROR=$DVIERR
  131.     else
  132.       # failure
  133.       mv -f mpx$$.tex $TEXERR
  134.       mv -f mpx$$.log $ERRLOG
  135.       echo "$0: Command failed: $TEX $TEXERR; see $ERRLOG" >&2
  136.       exit 2
  137.     fi
  138.   elif test "$mode" = troff; then
  139.     if cat mpx$$.i | eval $TROFF >mpx$$.t; then
  140.       # success, prepare for step 3.
  141.       WHATEVER_TO_MPX="$DMP"
  142.       INFILE=mpx$$.t
  143.       INERROR=$TROFF_OUTERR
  144.     else
  145.       # failure
  146.       mv -f mpx$$.i $TROFF_INERR
  147.       echo "$0: Command failed: cat $TROFF_INERR | $TROFF" >&2
  148.       rm -f mpx$$.t
  149.       exit 2
  150.     fi
  151.   else
  152.     echo "$0: Unknown typesetter mode: $mode; how did this happen?" >&2
  153.     exit 2
  154.   fi
  155.  
  156.   # Step 3: Translate typesetter output to a MetaPost MPX.
  157.   if $WHATEVER_TO_MPX $INFILE $MPXFILE >$ERRLOG; then
  158.     : # success
  159.   else 
  160.     # failure
  161.     mv -f $INFILE $INERROR
  162.     test $mode = troff && mv -f mpx$$.i $TROFF_INERR
  163.     echo "$0: Command failed: $WHATEVER_TO_MPX $INERROR $MPXFILE" >&2
  164.     # Better to remove $MPXFILE if something went wrong rather than
  165.     # leaving behind an unfinished or unusable version since $NEWER
  166.     # might think that all is fine if $MPXFILE exists.
  167.     rm -f $MPXFILE
  168.     cat $ERRLOG >&2
  169.     exit 3
  170.   fi
  171.  
  172.   rm -f $ERRLOG mpx$$.*
  173. fi
  174.  
  175. exit 0
  176.